{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "导包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "简单练习  生成单位矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[1., 0., 0., 0., 0.],\n       [0., 1., 0., 0., 0.],\n       [0., 0., 1., 0., 0.],\n       [0., 0., 0., 1., 0.],\n       [0., 0., 0., 0., 1.]])"
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = np.eye(5)\n",
    "A"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "单变量的线性回归\n",
    "读入数据展示数据\n",
    "根据第一行数据城市人口  预测第二行数据开小吃店的利润"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "data": {
      "text/plain": "   Ones  Population   Profit\n0     1      6.1101  17.5920\n1     1      5.5277   9.1302\n2     1      8.5186  13.6620\n3     1      7.0032  11.8540\n4     1      5.8598   6.8233",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Ones</th>\n      <th>Population</th>\n      <th>Profit</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>6.1101</td>\n      <td>17.5920</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>5.5277</td>\n      <td>9.1302</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>1</td>\n      <td>8.5186</td>\n      <td>13.6620</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>1</td>\n      <td>7.0032</td>\n      <td>11.8540</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>1</td>\n      <td>5.8598</td>\n      <td>6.8233</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据路径\n",
    "path = \"D:\\date\\distable\\吴恩达编程数据\\ex1data1.txt\"\n",
    "# 读入数据\n",
    "data = pd.read_csv(path,names=['Population','Profit'])\n",
    "data.insert(0, 'Ones', 1)\n",
    "data.head()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 864x432 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘出散点图\n",
    "data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,6))\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [],
   "source": [
    "def computeCost1(x,y,theta):\n",
    "    inner = np.power(((x*theta.T)-y),2)\n",
    "    return np.sum(inner)/(2 * len(x))\n",
    "\n",
    "def computeCost(x,y,theta):\n",
    "    inner = np.power(((x * theta.T)-y),2)\n",
    "    return np.sum(inner)/(2 * len(x))\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [],
   "source": [
    "# 获取值\n",
    "cols = data.shape[1]\n",
    "X = data.iloc[:,:-1]#X是data里的除最后列\n",
    "y = data.iloc[:,cols-1:cols]#y是data最后一列"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [
    {
     "data": {
      "text/plain": "   Ones  Population\n0     1      6.1101\n1     1      5.5277\n2     1      8.5186\n3     1      7.0032\n4     1      5.8598",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Ones</th>\n      <th>Population</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>6.1101</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>5.5277</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>1</td>\n      <td>8.5186</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>1</td>\n      <td>7.0032</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>1</td>\n      <td>5.8598</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.head()#head()是观察前5行\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "32.072733877455676\n"
     ]
    }
   ],
   "source": [
    "# 转化成矩阵   初始化 theta\n",
    "X = np.matrix(X.values)\n",
    "y = np.matrix(y.values)\n",
    "theta = np.matrix(np.array([0,0]))\n",
    "\n",
    "print(computeCost(X,y,theta))\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "outputs": [],
   "source": [
    "def gradientDescent(X, y, theta, alpha, iters):\n",
    "    temp = np.matrix(np.zeros(theta.shape))\n",
    "    parameters = int(theta.ravel().shape[1])\n",
    "    cost = np.zeros(iters)\n",
    "\n",
    "    for i in range(iters):\n",
    "        error = (X * theta.T) - y\n",
    "\n",
    "        for j in range(parameters):\n",
    "            term = np.multiply(error, X[:,j])\n",
    "            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))\n",
    "\n",
    "        theta = temp\n",
    "        cost[i] = computeCost(X, y, theta)\n",
    "\n",
    "    return theta, cost\n",
    "#这个部分实现了Ѳ的更新"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "初始化参数 并计算"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "temp是[[0. 0.]]\n",
      "[[-3.87797313  1.19124466]]\n",
      "[4.47702094 4.47702092 4.4770209  ... 4.47700027 4.47700026 4.47700025]\n",
      "predict1: [[0.29138319]]\n",
      "predict2: [[4.46073951]]\n"
     ]
    }
   ],
   "source": [
    "alpha = 0.001\n",
    "iters = 1500\n",
    "g = theta\n",
    "cost = 0\n",
    "for i in range(20):\n",
    "    g, cost = gradientDescent(X, y, g, alpha, iters)\n",
    "print(g)\n",
    "print(cost)\n",
    "\n",
    "predict1 = [1,3.5]*g.T\n",
    "print(\"predict1:\",predict1)\n",
    "predict2 = [1,7]*g.T\n",
    "print(\"predict2:\",predict2)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "绘图"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'matplotlib.figure.Figure'>\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 864x576 with 1 Axes>",
      "image/png": "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IYRpQHlnPX5tbS3vv/8+X3/9dWc9pJZQt27dWG211SgtLU27FEmSpKzIyYWAIYQ+wEDgeWAwcHQI4SBgEslo9Gftfcz333+fHj160KdPH0IInVqv2i7GyJw5c3j//ffp27dv2uVIkiRlRdYvBAwhdAfuBo6LMX4OjAPWAgaQjESf38z9jgghTAohTJo9e/Z3bv/6669ZaaWVDMwpCyGw0korOeIvSZKKWlZDcwihlCQw3xxjnAAQY/woxlgXY1wIXA1s0dR9Y4zjY4yDYoyDevX6zlR59Y+fpcrVHv4cJElSscvm7BkBuBaYFmO8oMH2VRvstifwWrZqyLaSkhIGDBjARhttxN577828efOW+LEOOeQQ7rrrLgB++9vf8t///rfZfR9//HGeffbZRd9feeWV/O1vf1viY0uSJKll2expHgz8GpgSQng5s+0UYL8QwgAgAjOB32WxhqwqKyvj5ZdfBuCAAw7gyiuv5Pjjj190e11dHSUlJe1+3GuuuabF2x9//HG6d+/O1ltvDcDw4cPbfQxJkiS1XdZGmmOMT8cYQ4xx4xjjgMzHgzHGX8cY+2e275GZZaPgbbPNNrz55ps8/vjjbL/99uy///7079+furo6RowYweabb87GG2/MVVddBSQX0B199NFssMEG7Lbbbnz88ceLHmu77bZbtALiP//5TzbddFM22WQTdtxxR2bOnMmVV17JhRdeyIABA3jqqac47bTTOO+8ZAa/l19+mS233JKNN96YPffck88++2zRY5500klsscUWrLvuujz11FM5PkOSJEmFqyCW0W7VccdBZsS30wwYABdd1KZdFyxYwEMPPcTOO+8MwAsvvMBrr71G3759GT9+PMsvvzwvvvgi8+fPZ/Dgwey0005UVlYyffp0pkyZwkcffcQGG2zAb37zm8Ued/bs2Rx++OE8+eST9O3bl08//ZQVV1yR4cOH0717d0444QQA/v3vfy+6z0EHHcSll17Ktttuy6hRozj99NO5KPM8FixYwAsvvMCDDz7I6aefziOPPNLh0yRJktQVFEdoTklNTQ0DBgwAkpHmww47jGeffZYttthi0fRr//rXv3j11VcX9SvPnTuXGTNm8OSTT7LffvtRUlJC79692WGHHb7z+M899xw//elPFz3Wiiuu2GI9c+fOpbq6mm233RaAgw8+mL333nvR7cOGDQNgs802Y+bMmR167pIkSV1JcYTmNo4Id7aGPc0NLbfccou+jjFy6aWXMmTIkMX2efDBB1uddSLG2KkzUyyzzDJAcgHjggULOu1xJUmSil3W52nu6oYMGcK4ceOora0F4I033uCrr77ipz/9Kbfddht1dXV88MEHPPbYY9+571ZbbcUTTzzB//73PwA+/fRTAHr06MEXX3zxnf2XX355VlhhhUX9yjfddNOiUWdJkiQtueIYac5jv/3tb5k5cyabbropMUZ69epFRUUFe+65J48++ij9+/dn3XXXbTLc9urVi/HjxzNs2DAWLlzIKquswsMPP8zuu+/OXnvtxb333sull1662H1uvPFGhg8fzrx581hzzTW5/vrrc/VUJUmSilaIMaZdQ6sGDRoU62eTqDdt2jTWX3/9lCpSY/48JElSR1VUVjF24nRmVdfQu2cZI4b0Y+jA8pzWEEKYHGMc1Hi7I82SJElKXUVlFSMnTKGmtg6AquoaRk6YApDz4NwUe5olSZKUurETpy8KzPVqausYO3F6ShUtztAsSZKk1M2qrmnX9lwzNEuSJCl1vXuWtWt7rhmaJUmSlLoRQ/pRVlqy2Lay0hJGDOmXUkWL80JASZIkpa7+Yr+0Z89ojqF5Cc2ZM4cdd9wRgA8//JCSkhJ69eoFwAsvvMD3vve9JXrcXXfdlVtuuYWePXt2qL6ZM2ey/vrrs9566/H111/To0cPjjrqKA4++OAW7/fyyy8za9Ysdt111w4dX5Ikqb2GDizPm5DcmKF5Ca200kqLltA+7bTT6N69OyeccMKi2xcsWMDSS7f/9D744IOdVSJrrbUWlZWVALz99tuLFkk59NBDm73Pyy+/zKRJkwzNkiRJDXSZnuaKyioGj3mUvic/wOAxj1JRWdXpxzjkkEM4/vjj2X777TnppJN44YUX2HrrrRk4cCBbb70106cnU6bccMMNDBs2jJ133pl11lmHE088cdFj9OnTh08++WTRSPHhhx/OhhtuyE477URNTXL16IsvvsjGG2/MVlttxYgRI9hoo41arW3NNdfkggsu4JJLLgFosrZvvvmGUaNGcfvttzNgwABuv/32Zp+DJElSV9IlRppzOVn2G2+8wSOPPEJJSQmff/45Tz75JEsvvTSPPPIIp5xyCnfffTeQjOhWVlayzDLL0K9fP4455hhWX331xR5rxowZ3HrrrVx99dXss88+3H333Rx44IEceuihjB8/nq233pqTTz65zbVtuummvP766wCst956TdZ2xhlnMGnSJC677DKAFp+DJElSV9ElQnNLk2V3dmjee++9KSlJrvycO3cuBx98MDNmzCCEQG1t7aL9dtxxR5ZffnkANthgA955553vhOa+ffsyYMAAADbbbDNmzpxJdXU1X3zxBVtvvTUA+++/P//4xz/aVFvDJdNbqq2htu4nSZJUzLpEe0YuJ8tebrnlFn196qmnsv322/Paa69x//338/XXXy+6bZlllln0dUlJCQsWLPjOYzW1T8Pg216VlZWsv/76rdbWUFv3kyRJKmZdIjSnNVn23LlzKS9PRrJvuOGGTnnMFVZYgR49evDcc88BcNttt7XpfjNnzuSEE07gmGOOabG2Hj168MUXXyz6PhvPQZIkqdB0idCc1mTZJ554IiNHjmTw4MHU1dW1foc2uvbaazniiCPYaqutiDEuavNo7K233mLgwIGsv/767LPPPhxzzDGLZs5orrbtt9+e//73v4suBMzWc5AkSSokoSN/7s+VQYMGxUmTJi22bdq0aYtaDdqiorIqbyfLbq8vv/yS7t27AzBmzBg++OADLr744lRrau/PQ5IkKR+FECbHGAc13t4lLgSE/J4su70eeOABRo8ezYIFC1hjjTVsm5AkScqyLhOai8mvfvUrfvWrX6VdhiRJUpfRJXqaJUmSpI4o6NBcCP3YXYE/B0mSVOwKNjR369aNOXPmGNhSFmNkzpw5dOvWLe1SJEmSsqZge5pXW2013n//fWbPnp12KV1et27dWG211dIuQ5IkKWsKNjSXlpbSt2/ftMuQJEkpK6ZpZZW/CjY0S5IkVVRWMXLCFGpqkwW4qqprGDlhCoDBWZ2qYHuaJUmSxk6cvigw16uprWPsxOkpVaROsWBB2hV8h6FZkiQVrFnVNe3arjz3xhtw8MGwyy5pV/IdhmZJklSwevcsa9d25anXX4cDD4T114c774SNN4ba2rSrWoyhWZIkFawRQ/pRVlqy2Lay0hJGDOmXUkVql2nTYP/9YYMN4J574Pjj4X//g/PPh9LStKtbjBcCSpKkglV/sZ+zZxSYqVPhzDPhjjtg2WXhxBPhj3+EXr3SrqxZhmZJklTQhg4sNyQXiilT4Iwz4K67oHt3OPnkZHR55ZXT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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(data.Population.min(), data.Population.max(), 100)\n",
    "f = g[0, 0] + (g[0, 1] * x)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(x, f, 'r', label='Prediction')\n",
    "ax.scatter(data.Population, data.Profit, label='Traning Data')\n",
    "ax.legend(loc=2)\n",
    "ax.set_xlabel('Population')\n",
    "ax.set_ylabel('Profit')\n",
    "ax.set_title('Predicted Profit vs. Population Size')\n",
    "plt.show()\n",
    "#原始数据以及拟合的直线\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "name": "pycharm-88121956",
   "language": "python",
   "display_name": "PyCharm (吴恩达机器学习)"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}